自从 Google Reader 在 2013 年"退休"后,RSS 爱好者们就像失去家园的游牧民族,四处寻找新的栖息地。作为资深信息"囤积者",我先后尝试过 Feedly、Inoreader 等主流 RSS 阅读器,也折腾过 RSSHub 这样的神器。但随着时间推移,我逐渐意识到:我需要的只是一个纯粹的 RSS 订阅管理工具,而不是功能繁杂的"瑞士军刀"。
于是,我决定把命运掌握在自己手中——自托管部署 Tiny Tiny RSS(简称 TT-RSS)。这款开源 RSS 阅读器就像数字时代的私人图书馆管理员,安静、高效且完全受你控制。
温馨提示:建议先在服务器上创建专用目录(比如 ~/tt-rss),后续所有操作都在此目录进行,避免文件散落各处找不着北 😉
TT-RSS 官方推荐使用 cosign 验证 Docker 镜像签名,这是现代容器安全的重要实践。如果你的服务器还没安装 cosign,可以这样操作:
# 创建项目目录并安装 cosign
mkdir -p ~/tt-rss && cd ~/tt-rss
curl -LO "https://github.com/sigstore/cosign/releases/latest/download/cosign-linux-amd64"
sudo install -o root -g root -m 755 cosign-linux-amd64 /usr/local/bin/cosign
安全无小事,我们来验证官方镜像的可靠性:
# 创建公钥文件
cat > cosign.pub <<'EOF'
-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEtoahWEy+L2JZCyDZ3+sKacGjhLCj
DDZpyS24bZzLoqZ3uEROqDusa9F9gNWP4sd3nbH02Tc0x89x5mM29wVg3w==
-----END PUBLIC KEY-----
EOF
# 执行验证
cosign verify --key cosign.pub cthulhoo/ttrss-web-nginx:latest \
--private-infrastructure=true
看到"Verified OK"就说明镜像安全可信啦!
我们需要两个关键文件:.env
环境变量文件和 docker-compose.yml
编排文件。
# 数据库配置(请务必修改密码!)
TTRSS_DB_USER=postgres
TTRSS_DB_NAME=postgres
TTRSS_DB_PASS=your_strong_password_here
# 会话设置(我把cookie有效期设为30天,避免频繁登录)
TTRSS_SESSION_COOKIE_LIFETIME=2592000
# 绑定到本地端口,配合反向代理更安全
HTTP_PORT=127.0.0.1:8280
version: "3"
services:
db:
image: postgres:15-alpine
restart: unless-stopped
env_file: .env
environment:
POSTGRES_USER: ${TTRSS_DB_USER}
POSTGRES_PASSWORD: ${TTRSS_DB_PASS}
POSTGRES_DB: ${TTRSS_DB_NAME}
volumes:
- db:/var/lib/postgresql/data
app:
image: cthulhoo/ttrss-fpm-pgsql-static:latest
restart: unless-stopped
env_file: .env
volumes:
- app:/var/www/html
- ./config.d:/opt/tt-rss/config.d:ro
depends_on:
- db
updater:
image: cthulhoo/ttrss-fpm-pgsql-static:latest
restart: unless-stopped
env_file: .env
volumes:
- app:/var/www/html
- ./config.d:/opt/tt-rss/config.d:ro
depends_on:
- app
command: /opt/tt-rss/updater.sh
web-nginx:
image: cthulhoo/ttrss-web-nginx:latest
restart: unless-stopped
env_file: .env
ports:
- "${HTTP_PORT}:80"
volumes:
- app:/var/www/html:ro
depends_on:
- app
volumes:
db:
app:
docker compose up -d
由于我们将服务绑定到 127.0.0.1,需要通过反向代理对外提供服务。我的配置方案是:
TT-RSS 官方提供安卓客户端,iOS 用户也可以在 App Store 找到相关应用。要使用移动端,记得开启 API 功能:
自托管 TT-RSS 就像拥有了自己的数字信息花园,你可以:
虽然初期部署需要一些技术投入,但换来的是长期的信息自由。当别人在各种信息流中迷失时,你已经建立起了高效的信息获取系统——这大概就是技术极客的快乐吧!